--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit bd0eef6ac97302f21aef5ced8f7fbdcb2f770a78
Parents : 251df14
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-26T17:57:29-05:00
feat(electron): update post-install script to include patching for electron-builder file system constants
Changes
3 files changed, 51 insertions(+), 2 deletions(-)
Diff
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a2c1b7c0..43862ebb 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -116,7 +116,7 @@ jobs:
pnpm exec vitest run --config vitest.electron.config.js
;;
backend-tests)
- uv run python -m pytest tests/backend -n auto \
+ MESHCHAT_SKIP_STORAGE_LOCK=1 uv run python -m pytest tests/backend -n auto \
--cov=meshchatx/src/backend
;;
lang-tests)
diff --git a/package.json b/package.json
index 571d5997..19ed8e2f 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"test:e2e:install": "playwright install chromium",
- "electron-postinstall": "electron-builder install-app-deps && node scripts/ensure-micron-parser-package.js",
+ "electron-postinstall": "electron-builder install-app-deps && node scripts/ensure-micron-parser-package.js && node scripts/patch-electron-builder-fs.cjs",
"electron": "pnpm run electron-postinstall && pnpm run build && electron .",
"dist": "pnpm run electron-postinstall && pnpm run build && electron-builder --publish=never",
"dist:linux": "pnpm run electron-postinstall && cross-env PLATFORM=linux pnpm run build && electron-builder --linux AppImage deb --publish=never",
diff --git a/scripts/patch-electron-builder-fs.cjs b/scripts/patch-electron-builder-fs.cjs
new file mode 100644
index 00000000..230fd0fe
--- /dev/null
+++ b/scripts/patch-electron-builder-fs.cjs
@@ -0,0 +1,49 @@
+#!/usr/bin/env node
+
+const fs = require("node:fs");
+const path = require("node:path");
+
+const root = path.join(__dirname, "..");
+const targets = [path.join(root, "node_modules", "app-builder-lib", "out", "binDownload.js")];
+
+const preamble = `const __ebFsConstants = (() => {
+ try {
+ const c = require("fs").constants;
+ if (c && c.R_OK != null) {
+ return c;
+ }
+ } catch (_) {}
+ try {
+ const c = require("node:fs").constants;
+ if (c && c.R_OK != null) {
+ return c;
+ }
+ } catch (_) {}
+ return { R_OK: 4, W_OK: 2, X_OK: 1 };
+})();
+
+`;
+
+function patchBinDownload(source) {
+ if (source.includes("__ebFsConstants")) {
+ return source;
+ }
+ let next = preamble + source;
+ next = next.replace(/fs_1\.constants\.R_OK/g, "__ebFsConstants.R_OK");
+ next = next.replace(/fs_1\.constants\.W_OK/g, "__ebFsConstants.W_OK");
+ next = next.replace(/fs\.constants\.R_OK/g, "__ebFsConstants.R_OK");
+ next = next.replace(/fs\.constants\.W_OK/g, "__ebFsConstants.W_OK");
+ return next;
+}
+
+for (const target of targets) {
+ if (!fs.existsSync(target)) {
+ continue;
+ }
+ const original = fs.readFileSync(target, "utf8");
+ const patched = patchBinDownload(original);
+ if (patched !== original) {
+ fs.writeFileSync(target, patched);
+ console.log(`patched ${path.relative(root, target)}`);
+ }
+}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────